#pragma once
#include"preCmpH.h"
#include"UIEvent.h"
#include"UIInputManager.h"
#include"UITimer.h"

BEGIN_NAMESPACE(ui_manager)
class UIManager;
BEGIN_NAMESPACE(ui_events)

class UIEventManager;
typedef std::shared_ptr<UIEventManager> UIEventManagerPtr;

class UIEventManager
{
public:
//=====================================
// Constructors, Destructor, Operators
//=====================================
	UIEventManager();
	~UIEventManager();
//=====================================
// Functionality
//=====================================
	void StartUp(UIManager& manager);
	void ShutDown();

	void Clear();
	void Polling();
//=====================================
// Setters
//=====================================

	void addEvent(UIEvent uievent);
//=====================================
// Getters
//=====================================

	bool isEmpty();
	UIEvent getEvent();
	ui_input::UIInputManager& getInputManager();
	UITimer& getTimer();
	static UIEventManager& getInstance();
private:
	UIEventManager(const UIEventManager&);
	UIEventManager& operator= (const UIEventManager&);

	std::list<UIEvent> events_;
	UITimer timer_;
	ui_input::UIInputManager* inputManager_;
};

END_NAMESPACE // UI Events
END_NAMESPACE // UI Manager